package com.demo.modules.mq.rabbit.configuration;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 直接转发，不对消息做过滤
 *
 * @author MyPC
 */
@Configuration
public class FanoutConfiguration {
    /**
     * 声明一个fanout类型的交换机
     *
     * @return
     */
    @Bean
    public FanoutExchange fanoutExchange() {
        //这种创建方式跟new创建是一样的
//        ExchangeBuilder.fanoutExchange("wr.fanout").build();
        return new FanoutExchange("wr.fanout");
    }

    /**
     * 声明一个队列
     *
     * @return
     */
    @Bean
    public Queue queue03() {
        //QueueBuilder.durable()（创建一个持久的队列，将消息写入磁盘中）;这种创建方式跟new是一样的
        //return QueueBuilder.durable("fanout.queue03").lazy().build();(创建一个lazy Queue-惰性队列)
        //默认持久的
        return new Queue("fanout.queue03");
    }

    /**
     * 声明一个队列
     *
     * @return
     */
    @Bean
    public Queue queue04() {
        //QueueBuilder.durable()（创建一个持久的队列，将消息写入磁盘中）;这种创建方式跟new是一样的
        //return QueueBuilder.durable("fanout.queue04").lazy().build();(创建一个lazy Queue-惰性队列)
        //默认持久的
        return new Queue("fanout.queue04");
    }

    /**
     * 绑定交换机和队列
     *
     * @param fanoutExchange
     * @param queue03
     * @return
     */
    @Bean
    public Binding binding03(FanoutExchange fanoutExchange, Queue queue03) {
        return BindingBuilder.bind(queue03).to(fanoutExchange);
    }

    /**
     * 绑定交换机和队列
     *
     * @param fanoutExchange
     * @param queue04
     * @return
     */
    @Bean
    public Binding binding04(FanoutExchange fanoutExchange, Queue queue04) {
        return BindingBuilder.bind(queue04).to(fanoutExchange);
    }

    //在绑定交换机和队列的时候还可以直接调用这个方法
    //这中方法和上面那种的作用是一样的
//    @Bean
//    public Binding binding03() {
//        return BindingBuilder.bind(queue03()).to(fanoutExchange());
//    }
//    @Bean
//    public Binding binding04() {
//        return BindingBuilder.bind(queue04()).to(fanoutExchange());
//    }

}
